/*************************************************************************
	> File Name: 4-1.c
	> Author: Angel Criss
	> Mail: abbytsing@gmail.com 
	> Created Time: Sat, Jul 12, 2014  10:47:56 AM
 ************************************************************************/
#include<stdlib.h>
#include<stdio.h>
#include"../err.h"

/*
 * 先检查文件是否存在:
 * 1)
 * 未加'-a'参数,如果文件存在则删除之,然后再新建同名文件,从终端中读一次
 * 一次写终端,一次写文件
 * 2)
 *带有'-a'参数i(用getopt()获得)，如果文件不存在,access()报错退出,如果存在,利用O_APPEND这个flag
 * 在文件末尾追加从终端中读入的字符,如果参数错误getopet()报错退出
 *
 *关键是 利用 设置buf大小和设置buf为NULL避免多次写到终端和文件中,最后在处理器中释放掉
 *缺点是 占资源...
 *
 */
int main(int argc,char *argv[])
{
    char ch;
    FILE *fdout;
    int opt;
    int len=sizeof(ch);
	if(argc==1)
	{
        while(ch=getchar())
        {
            if(ch==EOF)
                exit(0);
            fwrite(&ch,len,len,stdout);
        }
    }
	if(argc==2)
	{
	  if(access(argv[1],F_OK)==0)
		{
			remove(argv[1]);
				//err("remove");
		}

		if((fdout=fopen(argv[1],"w"))==NULL)
			err("open-1");

		while(ch=getchar())
		{
            if(ch==EOF)
                exit(0);
			fwrite(&ch,len,len,stdout);

			fwrite(&ch,len,len,fdout);
		}
	}

	if(argc==3)
	{
		if((opt=getopt(argc,argv,"a:")!=-1))
		{
			if((fdout=fopen(argv[2],"a+"))==NULL)
				err("open-2");

			while(ch=getchar())
			{
                if(ch==EOF)
                    exit(0);
				fwrite(&ch,len,len,stdout);

				fwrite(&ch,len,len,fdout);
			}
		}
		else if(errno)
		{
			printf("%s -a filename\n",argv[0]); //充当getopt()报错
			exit(EXIT_SUCCESS);
		}
	}
}
